//
// SystemDeviceIterator.hpp for SystemDeviceIterator in /home/mambou_j//babel-2014
// 
// Made by jacquesquentin mamboumouafo
// Login   <mambou_j@epitech.net>
// 
// Started on  Mon May 14 19:59:41 2012 jacquesquentin mamboumouafo
// Last update Mon May 14 20:15:08 2012 jacquesquentin mamboumouafo
//


#ifndef	__SYSTEMDEVICEITERATOR_HPP__
#define	__SYSTEMDEVICEITERATOR_HPP__

#include	<iterator>
#include	<cstddef>
#include	"System.hpp"

// Forward declaration(s):
namespace	portaudio
{
  class	Device;
  class	HostApi;
}

namespace	portaudio
{

  class	System::DeviceIterator
  {
  public:
    typedef	std::bidirectional_iterator_tag iterator_category;
    typedef	Device value_type;
    typedef	ptrdiff_t difference_type;
    typedef	Device *pointer;
    typedef	Device &reference;

    Device	&operator*() const;
    Device	*operator->() const;

    DeviceIterator	&operator++();
    DeviceIterator	operator++(int);
    DeviceIterator	&operator--();
    DeviceIterator	operator--(int);

    bool	operator==(const DeviceIterator &rhs);
    bool	operator!=(const DeviceIterator &rhs);

  private:
    friend	class System;
    friend	class HostApi;
    Device	**ptr_;
  };
}

#endif
